#include <iostream>
#include <string>
#include <pthread.h>
//#include <thread>
#include <unistd.h>
#include "Thread.hpp"

using namespace std;

void print(int& cnt)
{
    while(cnt)
    {
        cout<< "I am a self thread..., cnt: " <<cnt <<endl;
        sleep(1);
    }
}
int main()
{
    yss::Thread<int> t1(print, 10);
    t1.Start();
    t1.Join();



    return 0;
}



// void* runthread(void *args)
// {
//     string name = static_cast<const char*>(args);
//     while(true)
//     {
//         cout << "I am new thread" << endl;
//         sleep(1);
//         int a = 10;
//         a /= 0;
//     }
//     return nullptr;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, runthread, (void*)"thread-1");
//     //线程分离
//     pthread_detach(tid);
//     int cnt = 5;
//     while(true)
//     {
//         if(!(cnt--)) break;
//         cout << "I am main thread..." << endl;
//         sleep(1);
//     }
//     // cout << "thread wait block" << endl;
//     // pthread_join(tid, nullptr);
//     // cout << "thread wait retrun" << endl;

//     return 0;
// }

// void newthread(int num)
// {
//     while(num)
//     {
//         cout << "I am new thread" << num << endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     thread t1(newthread, 5);
//     thread t2(newthread, 5);
//     thread t3(newthread, 5);

//     while(true)
//     {
//         cout << "I am main thread" << endl;
//         sleep(1);
//     }
//     t1.join();
//     t2.join();
//     t3.join();

//     return 0;
// }